home *** CD-ROM | disk | FTP | other *** search
Text File | 1996-09-17 | 12.1 KB | 373 lines | [TEXT/MPS ] |
- //========================================================================================
- //
- // File: FWView.h
- // Release Version: $ ODF 2 $
- //
- // Copyright: (c) 1993 - 1996 by Apple Computer, Inc., all rights reserved.
- //
- //========================================================================================
-
- #ifndef FWVIEW_H
- #define FWVIEW_H
-
- // ----- OpenDoc -----
-
- #ifndef FWODTYPS_H
- #include "FWODTyps.h"
- #endif
-
- // ----- Foundation Layer -----
-
- #ifndef FWEXCLIB_H
- #include "FWExcLib.h"
- #endif
-
- #ifndef FWCLAINF_H
- #include "FWClaInf.h"
- #endif
-
- #ifndef FWARDYNA_H
- #include "FWArDyna.h"
- #endif
-
- // ----- OS Layer -----
-
- #ifndef FWPOINT_H
- #include "FWPoint.h"
- #endif
-
- #ifndef FWRECT_H
- #include "FWRect.h"
- #endif
-
- #ifndef FWGC_H
- #include "FWGc.h"
- #endif
-
- // ----- ODUtil -----
-
- #ifndef FWORDCOL_H
- #include "FWOrdCol.h"
- #endif
-
- // ----- Framework Layer -----
-
- #ifndef FWEVENTH_H
- #include "FWEventH.h"
- #endif
-
- #ifndef FWVIEWS_K
- #include "FWViews.k"
- #endif
-
- //========================================================================================
- // Forward declarations
- //========================================================================================
-
- class FW_CFrame;
- class FW_CSuperView;
- class FW_CPrivOrderedCollection;
- class FW_CScroller;
- class FW_CScrollBar;
- class FW_CPrintHandler;
- struct Environment;
-
- //========================================================================================
- // View Types & Constants
- //========================================================================================
-
- // Binding for simply layout management
- typedef long FW_ViewBinding;
-
- // Note: View Binding constants are defined in FWViews.k
-
- //========================================================================================
- // CLASS FW_CView
- //========================================================================================
-
- class FW_CView : public FW_MEventHandler
- {
- friend FW_CSuperView;
-
- public:
- FW_DECLARE_CLASS
-
- //----------------------------------------------------------------------------------------
- // Initialization/destruction
- //
- public:
- virtual ~FW_CView();
-
- protected:
- // one-step initialization constructor
- FW_CView(Environment* ev,
- FW_CSuperView* container,
- const FW_CRect& bounds,
- ODID viewID);
-
- // two-step initialization constructor
- FW_CView(Environment* ev);
-
- //----------------------------------------------------------------------------------------
- // Inherited API
- //
- public:
- virtual FW_Handled HandleMouseUp(Environment* ev,
- const FW_CMouseEvent& theMouseEvent);
- virtual FW_Handled HandleMouseDown(Environment* ev,
- const FW_CMouseEvent& theMouseEvent);
- virtual FW_Handled HandleBGMouseDown(Environment* ev,
- const FW_CMouseEvent& theMouseEvent);
-
- virtual FW_Handled DoBGMouseDown(Environment *ev, const FW_CMouseEvent& theMouseEvent);
-
- //----------------------------------------------------------------------------------------
- // New API
- //
- public:
- // ----- Getters/Setters -----
- ODID GetViewID(Environment* ev) const;
- virtual void SetViewID(Environment* ev, ODID viewID);
-
- FW_CSuperView* GetSuperView(Environment* ev) const;
-
- // Bounds are in parent view coordinates (in content space)
- FW_CRect GetBounds(Environment* ev) const;
-
- // in view content coordinates
- virtual FW_CRect GetBoundsInContent(Environment *ev) const;
-
- // Visible bounds are in frame coordinates
- FW_CRect GetVisibleBounds(Environment* ev) const;
-
- virtual FW_CPoint GetExtent(Environment* ev) const; // just return the bounds
-
- FW_Boolean IsVisible(Environment* ev) const;
- virtual void SetVisible(Environment* ev, FW_Boolean visible,
- FW_Boolean propagate = TRUE);
-
- FW_ViewBinding GetBindings(Environment* ev) const;
- void SetBindings(Environment* ev, FW_ViewBinding bindings);
-
- // ----- Invalidate/Validate -----
- // always in view content coordinate
- void Invalidate(Environment* ev, const FW_CRect& rect, FW_Boolean allFrames = FALSE);
- void Invalidate(Environment* ev, ODShape* shape = NULL, FW_Boolean allFrames = FALSE);
- void Validate(Environment* ev, const FW_CRect& rect, FW_Boolean allFrames = FALSE);
- void Validate(Environment* ev, ODShape* shape = NULL, FW_Boolean allFrames = FALSE);
-
- // ----- Geometry utilities -----
- FW_CPoint GetLocation(Environment* ev) const;
- FW_CPoint GetSize(Environment* ev) const;
-
- virtual void SetLocation(Environment* ev, const FW_CPoint& loc, FW_ERedrawVerb redraw = FW_kInvalidate);
- virtual void SetSize(Environment* ev, const FW_CPoint& size, FW_ERedrawVerb redraw = FW_kInvalidate);
- virtual void LocationChanged(Environment* ev, const FW_CPoint& oldLoc);
- virtual void SizeChanged(Environment* ev, const FW_CPoint& oldSize);
-
- virtual void AdjustToNewLayout(Environment *ev, const FW_CPoint& oldExtent,
- const FW_CPoint& newExtent, FW_ERedrawVerb redraw);
-
- FW_Boolean IsMouseWithin(Environment* ev, ODFacet* odFacet,
- const FW_CPoint& theMousePoint) const;
- virtual FW_CView* GetViewContaining(Environment* ev, ODFacet* odFacet,
- const FW_CPoint& theMousePoint);
- void SetResizeInvalidates(Environment* ev, FW_Boolean invalidate);
-
- // ----- Coordinates Conversion -----
- ODTransform* AcquireViewToFrameTransform(Environment* ev) const;
- virtual ODTransform* AcquireViewContentToFrameTransform(Environment* ev) const;
-
- void FrameToView(Environment *ev, FW_CPoint& point) const;
- void FrameToView(Environment *ev, FW_CRect& rect) const;
- void FrameToView(Environment *ev, ODShape* shape) const;
- void ViewToFrame(Environment *ev, FW_CPoint& point) const;
- void ViewToFrame(Environment *ev, FW_CRect& rect) const;
- void ViewToFrame(Environment *ev, ODShape* shape) const;
-
- void FrameToViewContent(Environment *ev, FW_CPoint& point) const;
- void FrameToViewContent(Environment *ev, FW_CRect& rect) const;
- void FrameToViewContent(Environment *ev, ODShape* shape) const;
- void ViewContentToFrame(Environment *ev, FW_CPoint& point) const;
- void ViewContentToFrame(Environment *ev, FW_CRect& rect) const;
- void ViewContentToFrame(Environment *ev, ODShape* shape) const;
-
- // ----- Methods on subviews -----
-
- FW_Boolean IsSubViewOf(Environment* ev, const FW_CSuperView* parentView) const;
- virtual FW_Boolean HasSubViews(Environment* ev) const;
- virtual FW_CView* FindViewByID(Environment* ev, ODID requestedID) const;
-
- // ----- Content View -----
-
- virtual FW_Boolean IsContentView(Environment* ev) const;
-
- // ----- Methods on Frame -----
- virtual FW_CFrame* GetFrame(Environment* ev) const;
- virtual FW_Boolean IsFrame(Environment* ev) const;
-
- // ----- Drawing -----
- virtual FW_Handled HandleDraw(Environment *ev, ODFacet* odFacet, ODShape* invalidShape);
- virtual void Draw(Environment *ev, ODFacet* facet, ODShape* invalidShape);
-
- // ----- Events -----
- virtual FW_Handled DoMouseEnter(Environment* ev, ODFacet* odFacet, const FW_CPoint& theMousePoint, ODEventInfo* eventInfo);
- virtual FW_Handled DoMouseWithin(Environment* ev, ODFacet* odFacet, const FW_CPoint& theMousePoint, ODEventInfo* eventInfo);
- virtual FW_Handled DoMouseLeave(Environment* ev, ODFacet* odFacet, ODEventInfo* eventInfo);
-
- virtual void HandleActivateEvent(Environment* ev, const FW_CActivateEvent& theActivateEvent);
- virtual void DoActivateEvent(Environment* ev, const FW_CActivateEvent& theActivateEvent);
-
- // ----- Cursor Adjustment -----
- virtual FW_Handled AdjustCursor(Environment *ev, ODFacet* odFacet, const FW_CPoint& theMousePoint, ODEventInfo* eventInfo);
-
- // ----- Archiving -----
- // FW_CView is an abstract base class, so we never see a concrete
- // instance of an FW_CView in a stream. Nonetheless, it is convenient to
- // define the following methods here, since they can be reused by the
- // concrete view subclasses.
-
- static void Read(FW_CReadableStream& stream, FW_ClassTypeConstant type, void* object);
- static void Write(FW_CWritableStream& stream, FW_ClassTypeConstant type, const void *object);
-
- virtual void Flatten(Environment*ev, FW_CWritableStream& stream) const;
- virtual void InitializeFromStream(Environment*ev, FW_CReadableStream& stream);
- virtual void PostCreateViewFromStream(Environment *ev);
-
- //----------------------------------------------------------------------------------------
- // Internal API
- //
- public:
- virtual void PrivInvalidateCachedTransforms(Environment* ev);
-
- virtual void PrivInvalidateViewIternalTransform(Environment* ev);
-
- FW_Boolean PrivIsTopPrintedView(Environment* ev) const;
- void PrivSetTopPrintedView(Environment* ev, FW_Boolean topPrintedView);
-
- virtual void PrivAcquireContentScrollShape(Environment* ev,
- FW_XYSelector direction,
- ODShape* scrollShape) const;
-
- protected:
- void PrivSetBounds(Environment *ev, const FW_CRect& bounds);
- virtual void PrivInvalidateVisibleBounds(Environment *ev);
-
- private:
- virtual void PrivPostCreateViewFromStream(Environment *ev);
-
- //----------------------------------------------------------------------------------------
- // Data Members
- //
- private:
- ODID fViewID; // id set by user
- FW_CSuperView* fSuperView; // container view (NULL for FW_CFrame)
- FW_CRect fBounds; // position inside SuperView's content
- FW_CPrivOrderedCollection* fAdorners; // (not implemented yet)
- FW_Boolean fVisible; // visible state
- FW_Boolean fResizeInvalidates; // invalidate whole view when resized
- FW_ViewBinding fBindings; // for layout management
- ODTransform* fViewToFrameTransform; // internal use
- FW_Boolean fTopPrintedView; // internal use
- FW_Boolean fValidVisibleBounds;
- FW_CRect fVisibleBounds; // Cahed visible bounds of the view
- // through all its superviews (in frame coordinate)
- };
-
-
- //========================================================================================
- // class FW_CViewCollection
- //========================================================================================
-
- class FW_CViewCollection : public FW_TOrderedCollection<FW_CView>
- {
- public:
- FW_DECLARE_AUTO(FW_CViewCollection)
-
- FW_CViewCollection() :
- FW_TOrderedCollection<FW_CView>(){}
- ~FW_CViewCollection() {}
- };
-
-
-
- //========================================================================================
- // class FW_CViewCollectionIterator
- //========================================================================================
-
- class FW_CViewCollectionIterator : public FW_TOrderedCollectionIterator<FW_CView>
- {
- public:
- FW_DECLARE_AUTO(FW_CViewCollectionIterator)
-
- FW_CViewCollectionIterator(FW_CViewCollection* collection) :
- FW_TOrderedCollectionIterator<FW_CView>(collection){}
- ~FW_CViewCollectionIterator() {}
- };
-
-
- //========================================================================================
- // Inlines
- //========================================================================================
-
- //----------------------------------------------------------------------------------------
- // FW_CView inlines
- //----------------------------------------------------------------------------------------
-
- inline FW_Boolean FW_CView::PrivIsTopPrintedView(Environment*) const
- {
- return fTopPrintedView;
- }
-
- inline void FW_CView::PrivSetTopPrintedView(Environment*, FW_Boolean topPrintedView)
- {
- fTopPrintedView = topPrintedView;
- }
-
- inline ODID FW_CView::GetViewID(Environment*) const
- {
- return fViewID;
- }
-
- inline FW_CSuperView* FW_CView::GetSuperView(Environment*) const
- {
- return fSuperView;
- }
-
- inline FW_CRect FW_CView::GetBounds(Environment*) const
- {
- return fBounds;
- }
-
- inline FW_CPoint FW_CView::GetLocation(Environment*) const
- {
- return fBounds.TopLeft();
- }
-
- inline FW_CPoint FW_CView::GetSize(Environment*) const
- {
- return fBounds.Size();
- }
-
- inline void FW_CView::PrivSetBounds(Environment*, const FW_CRect& bounds)
- {
- fBounds = bounds;
- }
-
- inline FW_ViewBinding FW_CView::GetBindings(Environment*) const
- {
- return fBindings;
- }
-
- inline void FW_CView::SetBindings(Environment*, FW_ViewBinding bindings)
- {
- fBindings = bindings;
- }
-
- inline void FW_CView::SetResizeInvalidates(Environment*, FW_Boolean invalidate)
- {
- fResizeInvalidates = invalidate;
- }
-
- #endif
-